from PyQt5.QtCore import QObject , pyqtSignal

class CustSignal(QObject):

    #声明无参数的信号
    signal1 = pyqtSignal()

    #声明带一个int类型参数的信号
    signal2 = pyqtSignal(int)

    #声明带int和str类型参数的信号
    signal3 = pyqtSignal(int,str)

    #声明带一个列表类型参数的信号
    signal4 = pyqtSignal(list)

    #声明带一个字典类型参数的信号
    signal5 = pyqtSignal(dict)

    #声明一个多重载版本的信号，包括带int和str类型参数的信号和带str类型参数的信号
    signal6 = pyqtSignal([int,str], [str])

    def __init__(self,parent=None):
        super(CustSignal,self).__init__(parent)

        #将信号连接到指定槽函数
        self.signal1.connect(self.signalCall1)
        self.signal2.connect(self.signalCall2)
        self.signal3.connect(self.signalCall3)
        self.signal4.connect(self.signalCall4)
        self.signal5.connect(self.signalCall5)
        
        #连接带两个参数(int,str)的重载版本的信号
        self.signal6[int,str].connect(self.signalCall6)
        #连接带一个参数(str)的重载版本的信号
        self.signal6[str].connect(self.signalCall6OverLoad)

        #发射信号
        self.signal1.emit()
        self.signal2.emit(1)
        self.signal3.emit(1,"text")
        self.signal4.emit([1,2,3,4])
        self.signal5.emit({"name":"wangwu","age":"25"})
        self.signal6[int,str].emit(1,"text")
        self.signal6[str].emit("text")

    #无参数的槽函数
    def signalCall1(self):
        print("signal1 emit")
        
    #带一个参数(整数)的槽函数
    def signalCall2(self,val):
        print("signal2 emit,value:",val)
    
    #带两个参数(整数,整数)的槽函数
    def signalCall3(self,val,text):
        print("signal3 emit,value:",val,text)

    #带一个参数(list)的槽函数
    def signalCall4(self,val):
        print("signal4 emit,value:",val)
        
    #带一个参数(dict)的槽函数
    def signalCall5(self,val):
        print("signal5 emit,value:",val)
        
    #带两个参数(整数,整数)的槽函数
    def signalCall6(self,val,text):
        print("signal6 emit,value:",val,text)
        
    #带一个参数的槽函数
    def signalCall6OverLoad(self,val):
        print("signal6 overload emit,value:",val)

if __name__ == '__main__':  
    custSignal = CustSignal()
